package com.cskaoyan.javase.array._4operation._3curd.equals;

/**
 * String类的equals方法的方法调用者需要一个字符串引用/常量
 * 如果调用的字符串引用是null的话,会引发空指针异常
 * 如何解决呢?
 * 提供三种方式:
 *      1.最常规的解法,一般做法,if判断(任何引用数据类型,都适用)
 *      2.(针对equals方法调用时的特殊判断方式)
 *          equals方法在调用时,左右两边都需要一个对象
 *          这时要注意,equals方法具有对称性
 *          a.equals(b)和b.equals(a)效果一样
 *          只有方法的调用者为null时,才有可能产生空指针异常
 *          所以只要确保方法的调用者不是null,就能够避免空指针异常
 *      3.(仅针对String类避免空指针异常)
 *          String类有一个比较特殊的地方,它存在字符串常量,是一个字面值常量
 *          这在Java引用数据类型中是独一份的
 *          既然它有常量,那么就用常量来调用方法,绝无可能产生空指针异常
 *
 * @since 10:11
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        // 方式一
        String str = null;
        if (str != null) {
            System.out.println(str.equals("abc"));
        }

        // 方式二
        String str2 = "abc";
        // System.out.println(str.equals(str2));
        // 任何String内容和null比较,都返回false
        System.out.println(str2.equals(str));

        // 方式三
        // 判断一个字符串内容不是空字符串
        /*if (str.equals("")){
            // xxx
        }*/
        // 正确的做法是:
        if ("".equals(str)) {
            // xxx
        }
    }
}
